package com.nanhai.buddhist.college.module.collegebase.service.studentchange;

import com.nanhai.buddhist.college.framework.common.pojo.PageResult;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.studentchange.vo.StudentChangeCheckReqVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.studentchange.vo.StudentChangeCreateReqVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.studentchange.vo.StudentChangeExportReqVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.studentchange.vo.StudentChangePageReqVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.studentchange.vo.StudentChangeRespVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.studentchange.vo.StudentChangeUpdateReqVO;
import com.nanhai.buddhist.college.module.collegebase.dal.dataobject.studentchange.StudentChangeDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 学籍信息异动 Service 接口
 *
 * @author Akai
 */
public interface StudentChangeService {

    /**
     * 创建学籍信息异动
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createStudentChange(@Valid StudentChangeCreateReqVO createReqVO);

    /**
     * 更新学籍信息异动
     *
     * @param updateReqVO 更新信息
     */
    void updateStudentChange(@Valid StudentChangeUpdateReqVO updateReqVO);

    /**
     * 删除学籍信息异动
     *
     * @param id 编号
     */
    void deleteStudentChange(String id);

    /**
     * 获得学籍信息异动
     *
     * @param id 编号
     * @return 学籍信息异动
     */
    StudentChangeDO getStudentChange(String id);

    /**
     * 获得学籍信息异动列表
     *
     * @param ids 编号
     * @return 学籍信息异动列表
     */
    List<StudentChangeDO> getStudentChangeList(Collection<String> ids);

    /**
     * 获得学籍信息异动分页
     *
     * @param pageReqVO 分页查询
     * @return 学籍信息异动分页
     */
    PageResult<StudentChangeDO> getStudentChangePage(StudentChangePageReqVO pageReqVO);

    /**
     * 获得学籍信息异动列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 学籍信息异动列表
     */
    List<StudentChangeDO> getStudentChangeList(StudentChangeExportReqVO exportReqVO);

    /**
     * 审核异动信息
     *
     * @param req
     */
    void checkStudentChange(StudentChangeCheckReqVO req);

    void setOldData(PageResult<StudentChangeRespVO> pageResultVo);
}
